package com.htwy.core.model;

import com.htwy.core.config.WebappConfig;
import com.htwy.kits.NumberKit;
import com.jfinal.kit.Kv;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.*;
import com.jfinal.plugin.ehcache.CacheName;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>数据集合<br />
 * 表名:ht_sys_dataset<br />
 * 编写时间:2018-01-01<br />
 * 缓存名:com.htwy.core.model.Dataset</p>
 *
 * @author 贾治国
 * @version 1.0-SNAPSHOT
 */
@CacheName("com.htwy.core.model.Dataset")
public class Dataset extends CacheModel<Dataset> implements IBean {

    public static Dataset dao = new Dataset();


    /**
     * <p>设置主键</p>
     *
     * @param uuid 主键
     * @return 当前对象
     */
    public Dataset setUuid(String uuid) {
        set("uuid", uuid);
        return this;
    }

    /**
     * <p>获取主键</p>
     *
     * @return 主键
     */
    public String getUuid() {
        return getStr("uuid");
    }

    /**
     * <p>设置显示名称</p>
     *
     * @param label 显示名称
     * @return 当前对象
     */
    public Dataset setLabel(String label) {
        set("label", label);
        return this;
    }

    /**
     * <p>获取显示名称</p>
     *
     * @return 显示名称
     */
    public String getLabel() {
        return getStr("label");
    }

    /**
     * <p>设置编码</p>
     *
     * @param code 编码
     * @return 当前对象
     */
    public Dataset setCode(String code) {
        set("code", code);
        return this;
    }

    /**
     * <p>获取编码</p>
     *
     * @return 编码
     */
    public String getCode() {
        return getStr("code");
    }

    /**
     * <p>设置查询名称</p>
     *
     * @param statement 查询名称
     * @return 当前对象
     */
    public Dataset setStatement(String statement) {
        set("statement", statement);
        return this;
    }

    /**
     * <p>获取查询名称</p>
     *
     * @return 查询名称
     */
    public String getStatement() {
        return getStr("statement");
    }

    /**
     * <p>设置索引</p>
     *
     * @param serial 索引
     * @return 当前对象
     */
    public Dataset setSerial(Integer serial) {
        set("serial", serial);
        return this;
    }

    /**
     * <p>获取索引</p>
     *
     * @return 索引
     */
    public Integer getSerial() {
        return getInt("serial");
    }

    /**
     * <p>设置创建者</p>
     *
     * @param creator 创建者
     * @return 当前对象
     */
    public Dataset setCreator(String creator) {
        set("creator", creator);
        return this;
    }

    /**
     * <p>获取创建者</p>
     *
     * @return 创建者
     */
    public String getCreator() {
        return getStr("creator");
    }

    /**
     * <p>设置创建时间</p>
     *
     * @param createTime 创建时间
     * @return 当前对象
     */
    public Dataset setCreateTime(Date createTime) {
        set("createTime", createTime);
        return this;
    }

    /**
     * <p>获取创建时间</p>
     *
     * @return 创建时间
     */
    public Date getCreateTime() {
        return getDate("createTime");
    }

    /**
     * <p>设置最后修改者</p>
     *
     * @param mender 最后修改者
     * @return 当前对象
     */
    public Dataset setMender(String mender) {
        set("mender", mender);
        return this;
    }

    /**
     * <p>获取最后修改者</p>
     *
     * @return 最后修改者
     */
    public String getMender() {
        return getStr("mender");
    }

    /**
     * <p>设置最后修改时间</p>
     *
     * @param modifyTime 最后修改时间
     * @return 当前对象
     */
    public Dataset setModifyTime(Date modifyTime) {
        set("modifyTime", modifyTime);
        return this;
    }

    /**
     * <p>获取最后修改时间</p>
     *
     * @return 最后修改时间
     */
    public Date getModifyTime() {
        return getDate("modifyTime");
    }

    /**
     * <p>设置删除者</p>
     *
     * @param deletedBy 删除者
     * @return 当前对象
     */
    public Dataset setDeletedBy(String deletedBy) {
        set("deletedBy", deletedBy);
        return this;
    }

    /**
     * <p>获取删除者</p>
     *
     * @return 删除者
     */
    public String getDeletedBy() {
        return getStr("deletedBy");
    }

    /**
     * <p>设置删除标志</p>
     *
     * @param deletedMarker 删除标志
     * @return 当前对象
     */
    public Dataset setDeletedMarker(Integer deletedMarker) {
        set("deletedMarker", deletedMarker);
        return this;
    }

    /**
     * <p>获取删除标志</p>
     *
     * @return 删除标志
     */
    public Integer getDeletedMarker() {
        return getInt("deletedMarker");
    }

    /**
     * <p>设置删除时间</p>
     *
     * @param deleteTime 删除时间
     * @return 当前对象
     */
    public Dataset setDeleteTime(Date deleteTime) {
        set("deleteTime", deleteTime);
        return this;
    }

    /**
     * <p>获取删除时间</p>
     *
     * @return 删除时间
     */
    public Date getDeleteTime() {
        return getDate("deleteTime");
    }


    /**
     * <p>根据条件获取数据集合列表<br />
     * sqlParaKey:com.htwy.core.model.Dataset.findByCondition</p>
     *
     * @param conditions 传入的条件
     * @return 数据集合列表
     */
    @Override
    public List<Dataset> findByCondition(Map<String, Object> conditions) {
        SqlPara sqlPara = getSqlPara("com.htwy.core.model.Dataset.findByCondition", conditions);
        return dao().find(sqlPara);
    }

    /**
     * <p>根据分页信息和条件获取数据集合列表<br />
     * sqlParaKey:com.htwy.core.model.Dataset.findByCondition</p>
     *
     * @param conditions 传入的条件
     * @return 数据集合列表及分页信息
     */
    @Override
    public Page<Dataset> paginateByCondition(Map<String, Object> conditions) {
        int pageNumber = 1;
        int pageSize = WebappConfig.getConfig().getInt("defaultPageSize", 20);
        if (conditions.containsKey("pageNumber")) {
            String pageNumberStr = (String) conditions.get("pageNumber");
            if (StrKit.notBlank(pageNumberStr) && NumberKit.isZNum(pageNumberStr)) {
                pageNumber = Integer.parseInt(pageNumberStr);
            }
        }
        if (conditions.containsKey("pageSize")) {
            String pageSizeStr = (String) conditions.get("pageSize");
            if (StrKit.notBlank(pageSizeStr) && NumberKit.isZNum(pageSizeStr)) {
                pageSize = Integer.parseInt(pageSizeStr);
            }
        }
        return paginateByCondition(pageNumber, pageSize, conditions);
    }

    /**
     * <p>根据分页信息和条件获取数据集合列表<br />
     * sqlParaKey:com.htwy.core.model.Dataset.findByCondition</p>
     *
     * @param pageNumber 当前页数
     * @param pageSize   每页条数
     * @param conditions 传入的条件
     * @return 数据集合列表及分页信息
     */
    @Override
    public Page<Dataset> paginateByCondition(int pageNumber, int pageSize, Map<String, Object> conditions) {
        SqlPara sqlPara = getSqlPara("com.htwy.core.model.Dataset.findByCondition", conditions);
        return dao().paginate(pageNumber, pageSize, sqlPara);
    }

    /**
     * <p>根据主键数组删除数据集合<br />
     * sqlParaKey:com.htwy.core.model.Dataset.deleteByPks</p>
     *
     * @param pks 主键数组
     * @return 删除的条数
     */
    public int deleteByPks(String... pks) {
        if (pks != null && pks.length > 0) {
            SqlPara sqlPara = getSqlPara("com.htwy.core.model.Dataset.deleteByPks", Kv.by("pks", pks));
            int result = Db.update(sqlPara);
            if (result > 0) {
                clearCache();
            }
            return result;
        }
        return 0;
    }

    public List<Record> getDataByCode(String code) {
        SqlPara sqlPara = getSqlPara("com.htwy.core.model.Dataset.findByCondition", Kv.by("code", code));
        Dataset dataset = findFirst(sqlPara);
        if (dataset == null || StrKit.isBlank(dataset.getStatement())) {
            return null;
        } else {
            return Db.find(dataset.getStatement());
        }
    }
}